package com.example.springbooteasycode.zjrc.project.Koal;

public class CmdBuilder {
    private byte[] szCmd = new byte[4096]; // Java数组默认初始化为0

    public void buildCmd() {
        // 初始化指令长度和指令代码
        short cmdLength = 24; // 示例长度
        short cmdCode = 0x6AB6; // 指令代码

        // 设置指令长度（前2字节）
        szCmd[0] = (byte) (cmdLength >> 8);
        szCmd[1] = (byte) (cmdLength & 0xFF);

        // 设置指令代码（接下来2字节）
        szCmd[2] = (byte) (cmdCode >> 8);
        szCmd[3] = (byte) (cmdCode & 0xFF);

        // 生成消息头随机数（填充szCmd[4]到szCmd[11]）
        for (int i = 0; i < 8; i++) {
            szCmd[4 + i] = (byte) (Math.random() * 256); // 随机数0-255
        }

        // 此处没有显式填充szCmd[12]到szCmd[15]，这些位置保持为0

        // 从szCmd[16]开始填充其他数据
        byte[] cmdData = new byte[cmdLength];
        cmdData[0] = 0x01;
        cmdData[1] = 0x02;
        cmdData[2] = 0x03;
        cmdData[3] = 0x04;

        /**
         * cmdData：源数组（source array）。
         * 0：从源数组的索引 0 开始复制。
         * szCmd：目标数组（destination array）。
         * 16：从目标数组的索引 16 开始粘贴（写入位置偏移了16个元素）。
         * cmdLength：要复制的元素个数
         */
        // 该语句的作用是 将数组 cmdData 中从索引 0 开始的 cmdLength 个元素，复制到数组 szCmd 中从索引 16 开始的位置。
        System.arraycopy(cmdData, 0, szCmd, 16, cmdLength);

        // 验证szCmd[12]到szCmd[15]是否为0
        for (int i = 12; i < 16; i++) {
            System.out.printf("szCmd[%d] = 0x%02X%n", i, szCmd[i] & 0xFF);
        }
        System.out.println("============开始查看全部生成数据=======================");
        // 查看全部数据
        for (int i = 00; i < 20; i++) {
            System.out.printf("szCmd[%d] = 0x%02X%n", i, szCmd[i] & 0xFF);
        }
    }

    public static void main(String[] args) {
        CmdBuilder builder = new CmdBuilder();
        builder.buildCmd();
    }
}
